Loading an operating system traditionally requires boot or “initial program load” code. Historically, such code executed at least in part on a computer system prior to permanent memory initialization, and accordingly must be written to work in a memory-less environment. For a typical computing platform today, the early BIOS or firmware often runs in a mode called “stackless assembly” with no memory store into which a call stack can be initialized. Unfortunately, such stackless assembly language startup code is non-portable and very fragile with respect to maintenance and feature enhancement. Also, because of the limited available state and the crude programming environment, it is difficult to add features or to implement useful algorithms, such as cryptographic computations to authenticate firmware components.
Problems associated with the early boot code are particularly acute when modem 64 bit processors (including the Itanium Processor Family) are used in a computing system. The amount of code that needs to be handcrafted in assembly language is extremely large. Also, in the context of a modem BIOS architecture like the available Extensible Firmware Interface (e.g. EFI based Tiano Firmware), this early code must complete complex activities such as parsing the firmware file system metadata to find the Plug-In Environment Initialization Modules (PEIMs) and evaluate dependencies for purposes of legal module dispatch, etc. These latter tasks were never required in a legacy BIOS stackless environment and are difficult to implement in register-only environment.